package com.zonski.jbots.desktop.client;

import java.util.Random;

import com.zonski.jbots.engine.Device;
import com.zonski.jbots.engine.InputStreamFactory;

public abstract class DesktopDevice implements Device
{
    private static final int MAX_OFFSET = 4;
    
    private PainterCanvas canvas;

    private Random random;
    private int currentUpdate;
    private int vibrateFinishUpdate;

    public DesktopDevice()
    {
        this.random = new Random();
    }

    public PainterCanvas getCanvas()
    {
        return this.canvas;
    }

    public void setCanvas(PainterCanvas canvas)
    {
        this.canvas = canvas;
    }

    public void vibrate(int duration)
    {
        this.vibrateFinishUpdate = 
            Math.max(this.currentUpdate + duration, 
                    this.vibrateFinishUpdate);
    }

    /**
     * Implementation specific mechanism to play sounds
     * @param sound the name of the sound to be played
     * @param times the number of times to play the sound
     */
    public abstract void play(String sound, int times);

    public void update()
    {
        this.currentUpdate++;
        if(this.vibrateFinishUpdate != 0)
        {
            if(this.currentUpdate > this.vibrateFinishUpdate)
            {
                this.canvas.setOffset(0, 0);
                this.vibrateFinishUpdate = 0;
            }else{
                int offsetX = this.random.nextInt()%MAX_OFFSET;
                int offsetY = this.random.nextInt()%MAX_OFFSET;
                this.canvas.setOffset(offsetX, offsetY);
            }
        }
    }

    public void stopAll()
    {
        this.vibrateFinishUpdate = 0;
    }
}
